#include "ventanasimulacion.h"
#include "ui_ventanasimulacion.h"
#include "ventanaestadisticas.h"
#include <QVector>
#include "fuente.h"
#include "cajero.h"

bool VentanaSimulacion::esCajeroDisponible(int id) {
    for(int i=0; i<cajeros.size(); i++)
        if(id == cajeros[i]->getId())
            return true;
    return false;
}

void VentanaSimulacion::inhabilitarCajeros() {
    QPalette verde, rojo;
    verde.setColor(QPalette::WindowText, Qt::green);
    rojo.setColor(QPalette::WindowText, Qt::red);
    if (esCajeroDisponible(1))
        ui->lCajero1->setPalette(verde);
    else {
        ui->lCajero1->setPalette(rojo);
        ui->lICajero1->setEnabled(false);
    }

    if (esCajeroDisponible(2))
        ui->lCajero2->setPalette(verde);
    else {
        ui->lCajero2->setPalette(rojo);
        ui->lICajero2->setEnabled(false);
    }

    if (esCajeroDisponible(3))
        ui->lCajero3->setPalette(verde);
    else {
        ui->lCajero3->setPalette(rojo);
        ui->lICajero3->setEnabled(false);
    }

    if (esCajeroDisponible(4))
        ui->lCajero4->setPalette(verde);
    else {
        ui->lCajero4->setPalette(rojo);
        ui->lICajero4->setEnabled(false);
    }

    if (esCajeroDisponible(5))
        ui->lCajero5->setPalette(verde);
    else {
        ui->lCajero5->setPalette(rojo);
        ui->lICajero5->setEnabled(false);
    }

    if (esCajeroDisponible(6))
        ui->lCajero6->setPalette(verde);
    else {
        ui->lCajero6->setPalette(rojo);
        ui->lICajero6->setEnabled(false);
    }
 }


QString VentanaSimulacion::getNombreOperacion(int op) {
    switch (op) {
        case 1: return "Retiro";
        case 2: return "Deposito";
        case 3: return "Consulta";
        case 4: return "Pago de servicios";
    }
    return  "NULL";
}


VentanaSimulacion::VentanaSimulacion(QVector<Cajero*> cajeros) :
        ui(new Ui::VentanaSimulacion) {
    ui->setupUi(this);

    imagenesClientes.push_back(QImage(":/recursos/personaje1.png"));
    imagenesClientes.push_back(QImage(":/recursos/personaje2.png"));
    imagenesClientes.push_back(QImage(":/recursos/personaje3.png"));
    imagenesClientes.push_back(QImage(":/recursos/personaje4.png"));
    imagenesClientes.push_back(QImage(":/recursos/personaje5.png"));
    imagenesClientes.push_back(QImage(":/recursos/personaje6.png"));
    imagenesClientes.push_back(QImage(":/recursos/personaje7.png"));
    imagenesClientes.push_back(QImage(":/recursos/personaje8.png"));
    imagenesClientes.push_back(QImage(":/recursos/personaje9.png"));
    imagenesClientes.push_back(QImage(":/recursos/personaje10.png"));
    imagenesClientes.push_back(QImage(":/recursos/personaje11.png"));
    imagenesClientes.push_back(QImage(":/recursos/personaje12.png"));
    imagenesClientes.push_back(QImage(":/recursos/personaje13.png"));

    ui->lICajero1->setPixmap(QPixmap::fromImage(QImage(":/recursos/cajero2.png").scaled(50,65)));
    ui->lICajero2->setPixmap(QPixmap::fromImage(QImage(":/recursos/cajero2.png").scaled(50,65)));
    ui->lICajero3->setPixmap(QPixmap::fromImage(QImage(":/recursos/cajero3.png").scaled(50,65)));
    ui->lICajero4->setPixmap(QPixmap::fromImage(QImage(":/recursos/cajero4.png").scaled(50,65)));
    ui->lICajero5->setPixmap(QPixmap::fromImage(QImage(":/recursos/cajero5.png").scaled(50,65)));
    ui->lICajero6->setPixmap(QPixmap::fromImage(QImage(":/recursos/cajero6.png").scaled(50,65)));

    this->cajeros = cajeros;
    Fuente* fuente = new Fuente(this);
    fuente->start();
    for(int i = 0; i < cajeros.size(); i++) {
        Cajero* cajero = cajeros[i];
        cajero->setVentanaSimulacion(this);
        cajero->start();
        for (int j = 0; j < 10; j++) {
            int id = cajero->getId() - 1;
            etiquetas[id][j] = new QLabel();
            etiquetas[id][j]->setFixedHeight(50);
            etiquetas[id][j]->setPixmap(QPixmap());
            ui->gridLayout->addWidget(etiquetas[id][j], j + 1, id);
        }
    }
    inhabilitarCajeros();
}

void VentanaSimulacion::agregar(int cola, int imagen, int op, float monto) {
    QLabel** etiquetas = this->etiquetas[cola - 1];
    while (!(*etiquetas)->pixmap()->isNull())
        etiquetas++;
    QString mensaje = "Realizara una operacion de " + getNombreOperacion(op);
    if(op !=3)
        mensaje = "Realizara una operacion de " + getNombreOperacion(op)+ "\nMonto: " + QString::number(monto);
    (*etiquetas)->setPixmap(QPixmap::fromImage(imagenesClientes[imagen]).scaled(25,40));
    (*etiquetas)->setToolTip(mensaje);
    ui->tHistorial->append("Agregado cliente a la cola " + QString::number(cola));
    ui->tHistorial->append(mensaje + "\n");
}

void VentanaSimulacion::retirar(int cola) {
    cola--;
    for (int i = 0; i < 9; i++)
        etiquetas[cola][i]->setPixmap(*etiquetas[cola][i + 1]->pixmap());
    etiquetas[cola][9]->setPixmap(QPixmap());
    ui->tHistorial->append("Retirado cliente de la cola " + QString::number(cola) + "\n");
}

QVector<Cajero*> VentanaSimulacion::getCajeros() {
    return cajeros;
}


VentanaSimulacion::~VentanaSimulacion() {
    delete ui;
}

void VentanaSimulacion::on_bEstadisticas_clicked() {
    VentanaEstadisticas* w = new VentanaEstadisticas();

    for (int i = 0; i < cajeros.size(); i++) {
        int id = cajeros[i]->getId() - 1;
        w->setCantClientes(id, cajeros[i]->getCantClientes());
        w->setPorcRetNot(id, cajeros[i]->porcentajeOperacion(cajeros[i]->getRetirosNot()));
        w->setPorcDep(id, cajeros[i]->porcentajeOperacion(cajeros[i]->getCantidadDepositos()));
        w->setPorcCon(id, cajeros[i]->porcentajeOperacion(cajeros[i]->getCantidadConsultas()));
        w->setPorcSer(id, cajeros[i]->porcentajeOperacion(cajeros[i]->getCantidadServicios()));
        w->setPorcRet(id, cajeros[i]->porcentajeOperacion(cajeros[i]->getCantidadRetiros()));
        w->setIngreso(id, cajeros[i]->getTotalIngreso());
        w->setEngreso(id, cajeros[i]->getTotalEgreso());
    }

    w->show();
}
